參考來源:https://blog.gtwang.org/linux/unix-linux-find-command-examples/
https://ithelp.ithome.com.tw/articles/10209427
find 是一個很有用的指令,它支援非常多的搜尋選項,可以依照權限、擁有者、群組、檔案類型、日期與大小等條件來搜尋,這裡整理一些常用的 find 指令的一些使用技巧。
指定檔名搜尋
若要在目前的目錄底下,找尋檔案名稱為 gtwang.txt 的檔案,可以使用:
find . -name gtwang.txt
執行後,find 會列出所有檔名是 gtwang.txt 的檔案列表。
./gtwang/gtwang.txt
在 /home 目錄底下,找尋檔案名稱為 gtwang.txt 的檔案:
find /home -name gtwang.txt
輸出為
/home/gtwang/gtwang/gtwang.txt
在 /home 目錄底下,不分英文大小寫,找尋檔案名稱為 gtwang.txt 的檔案:
find /home -iname gtwang.txt
輸出為
/home/gtwang/gtwang/GTWang.txt
/home/gtwang/gtwang/GTWANG.TXT
/home/gtwang/gtwang/gtwang.txt
指定檔案類型搜尋
find 的 -type 參數可以指定檔案的類型,常用的選項有:
d:目錄。
p:具名的 pipe(FIFO)。
f:一般的檔案。
l:連結檔,如果與 -L 或 -follow 參數同時使用時,就只會搜尋到有問題的連結檔,如果想要與 -L 同時使用,請改用 -xtype。
s:socket 檔案。
在根目錄底下搜尋名稱為 gtwang 的目錄:
find / -type d -name gtwang
輸出會像這樣
/home/gtwang
/home/gtwang/gtwang
列出目前目錄底下所有的 PHP 檔案:
find . -type f -name "*.php"
檔案權限
-perm 可以指定檔案的權限,例如列出權限是 777 的所有檔案:
find . -type f -perm 0777
這個指令在檢查系統漏洞時會常用到。另外我們也可以用排除的方式,列出所有權限不是 777 的檔案:
find . -type f ! -perm 777
find 也用來搜尋具有特殊權限的檔案,例如找尋權限是 644 而且有 SGID 的檔案
find . -perm 2644
找尋權限是 644 而且有 Sticky Bit 的檔案:
find . -perm 1551
列出系統中所有 SUID 的檔案:
列出系統中所有 SGID 的檔案:
find / -perm /g+s
列出唯讀的檔案:
find / -perm /u=r
列出可執行的檔案:
find / -perm /a=x
執行指令
-exec 可以讓我們將搜尋出來的結果,使用其他的指令進行後續的處理動作,例如將目前目錄下所有權限為 777 的檔案找出來,用 chmod 將這些檔案的權限更改為 644:
find . -type f -perm 0777 -print -exec chmod 644 {} ;
找出所有權限為 777 的目錄,將這些目錄用 chmod 把權限改為 755:
find / -type d -perm 777 -print -exec chmod 755 {} ;
找出檔名為 gtwang.txt 的所有檔案,並且刪除它:
find . -type f -name "gtwang.txt" -exec rm -f {} ;
找出所有的 *.mp3 檔,並且刪除:
find . -type f -name "*.mp3" -exec rm -f {} ;
空檔案與隱藏檔
如果要找尋空檔案,可以使用 -empty 參數:
find . -type f -empty
找尋空目錄:
find . -type d -empty
在 UNIX/Linux 系統上的隱藏檔其實就是檔名以句點(.)開頭的檔案,若要找尋這些檔案可以執行:
find . -type f -name ".*"
檔案擁有者:
使用 -user 參數可以在搜尋時加上檔案擁有者的條件,搜尋特定使用者的檔案,例如在根目錄下搜尋 root 管理者的 gtwang.txt 這個檔案:
find / -user root -name gtwang.txt
在 /home 之下找出 gtwang 使用者的所有檔案:
find /home -user gtwang
在 /home 之下找出 gtwang 使用者的所有 *.txt 文字檔,副檔名不分大小寫:
find /home -user gtwang -iname "*.txt"
使用 -group 參數可以指定檔案的群組,例如在 /home 之下搜尋所有 developer 群組的檔案:
find /home -group developer
檔案修改與存取日期:
-mtime n
指定檔案的最後修改時間(modification time),單位為天。
-mmin n
指定檔案的最後修改時間,單位為分鐘。
-atime n
指定檔案的最後存取時間(access time),單位為天。
-amin n
指定檔案的最後存取時間,單位為分鐘。
-ctime n
指定檔案狀態相關資訊最後修改的時間(status time),單位為天。
-cmin n
指定檔案狀態相關資訊最後修改的時間,單位為分鐘。
檔案大小
使用 -size 參數可以指定檔案的大小,例如搜尋檔案大小剛好是 50MB 的檔案:
find . -size 50M
找出檔案大小介於 50MB 到 100MB 之間的檔案:
find . -size +50M -size -100M
找出大於 100MB 的檔案,並且直接刪除之:
find . -size +100M -exec rm -rf {} ;
最後來看關於Linux證照。